Tasten & Command Beschreibung
=============================


Command-Gruppe "DB": Datenbank
==============================

Beispiele fr den Umgang dieser Command-Gruppe finden sich in einem eigenen Profil
mit dem Namen "Database Example". Dieses befindet sich im 2. Profil-Set, also
zuvor durch Anwahl des obersten Men-Punktes im Systray-Popmenu das Profil-Set
umschalten.

--> Caution !
The database access of RK based on MS Jet engine 3.5 (DAO 3.5).
I am sorry to say that DAO 3.6 and greater is not supported!
DAO 3.6 is used by ME, 2000, XP etc.
But this is no reason not to use the database functions of RK.
In some (or many) cases it is required to prepare the system for DAO 3.5.
Maybe than DAO 3.5 and DAO 3.6 will be parallel installed but that seems to
make no trouble.

But first you should try if you can open a database with RK (see example profile).
If you get an error message like "Class not registered, looking for Object
with CLSID ... long number ...) than it seems DAO 3.5 is not available on your
system.
Than you should make a 2nd check:
Open path "\program files\common files\microsoft shared\dao".
If this folder exists than - I think - you will find the file dao360.dll only.
This says that DAO 3.6 is installed. The file for DAO 3.5 is dao350.dll.
But it would be too easy to copy this file into this folder, because the
installation of DAO 3.5 needs a lot more files and it must be correctly registered.

Therefore the easiest way to prepare your system is to download DAO 3.5 from
freewarehits.de and to run the exe-file on your system.
The archiv additional includes a file called vb5db.dll. This must be copied into
the Windows\System folder if not already exists.

I tried this method on a clean WinME installation and it works immediately without
any trouble. But it is required to say that I (the author) can not give any
warranties and it must be done at ones own risk !

The directly download address is:
http://www.freewarehits.de/AddFiles/dao35.zip (3.2 mb)

Die auf der Microsoft Jet-Engine aufsetzenden Datenbank-Anbindung erfordert - je nach
gewnschtem Datenbank-Zugriff - sogenannte ISAM-Treiber. Das ODBC-Verfahren liee
sich auch einstellen (s.u.), wurde aber nicht getestet.
Folgende Datenbanken - die Installation der erforderlichen Treiber vorrausgesetzt -
werden durch RK (mindestens) untersttzt:

- Access
- DBase 3/4/5
- Excel 3/4/5/8
- FoxPro 2/2.5/2.6/3
- Lotus WK 1/3/4
- Paradox 3/4/5
- Text

Erfolgreich getestet wurden Access (.mdb), Excel (.xls) und Text (.txt).
Die Treiber sollten - zumindest bei den Office-Anwendungen - bei der Installation der
jeweiligen Programme mit-installiert worden sein.

Allerdings... auf dem RK-Entwicklungs-Rechner lief - obwohl DAO 3.5 vorhanden - zunchst
nicht viel. Der Grund war, da die Treiber (35er) zwar vorhanden waren, allerdings nicht
ordnungsgem in der Registry eingetragen. Sofern sich diese im Windows-System-Verzeichnis
befinden, kann dies folgendermaen nachgeholt werden:

Z.B. das Ausfhren-Fenster ffnen und folgende Zeilen eingeben.

Regsvr32.exe C:\Windows\System\Msexcl35.dll
Regsvr32.exe C:\Windows\System\Mstext35.dll

Danach erfolgt (hoffentlich) die Meldung, da die Treiber erfolgreich installiert sind.

Die Treiber Msexcl40.dll/Mstext40.dll sind fr DAO ab 3.6 vorgesehen und fr DAO 3.5 nicht
geeignet!

Als nchstes bestand das Problem, da die ASCII-Zeichen (Umlaute etc.) nicht ordnungsgem
konvertiert wurden. Um dies zu beheben, mute manuell in die Registry eingegriffen werden:
Der entsprechde Pfad lautet (bitte suchen lassen):

Jet\3.5\Engines\Text

Folgender Schlssel mu ggf. gendert werden:
CharacterSet von "OEM" auf "ANSI" setzen.

Ggf. bei Excel, Access etc. kontrollieren.

Diese geschilderten Probleme traten nur bei der bereits vorhandenen DAO 3.5 auf.
Bei der oben beschriebenen DAO 3.5 Installation funktionierte alles auf Anhieb.

--> Einschrnkung
Beim Auslesen von Werte enthaltenen Zellen kommt es gelegentlich zu berlauffehlern. RK fngt
diese Fehler zwar ab, kann dann aber fr das betroffene Feld nur noch einen Leer-String senden.
Ferner wird auch nur das Auslesen untersttzt, beschreiben kann RK eine Datenbank durch
Direktzugriff (noch) nicht.

Vorgehensweise
--------------
Als erstes mu stets eine Datenbank geffnet werden.
RK arbeitet intern mit 2 Zeigern. Der erste positioniert einen Datensatz, der zweite ein
Datenfeld. Welches Datenfeld beim Sende-Befehl (DB.FIELD.SEND) letztendlich an die
Anwendung gesendet wird, ist von diesen 2 Zeigern abhngig.
Nun gibt RK dem Anwender diverse Commands in die Hand, um diese Zeiger zu positionieren.
Der Select-Command eignet sich z.B. fr eine einmalige Sendung eines Datenfeldes, indem der
Anwender dieses gezielt aus einer Liste heraussucht und anschlieend sendet.
Andere Commands wie SET und INC sind eher fr Serien-Sendungen gedacht, die z.B. in einer
Schleife untergebracht werden.

Faustregel:

1. Datenbank ffnen
2. Datensatz-Zeiger positionieren
3. Datenfeld-Zeiger positionieren
4. Senden


/DB.OPEN f[,t,p3,p4,p5]: To open database name <f> (file), sheet <t> (tabel), p3/4/5 = optional parameters
------------------------
Beim Zugriff auf eine Access-Datenbank (.mdb) oder Excel-Mappe (.xls) mssen die Parameter
<f> & <t> definiert sein. Wird der Parameter <t> nicht angegeben, so wird autom. eine Liste
angezeigt, aus der eine Tabelle ausgewhlt werden mu (entspr. DB.TABLE.SELECT).
Beim Zugriff auf eine TAB-separierte Text-Datei (.txt) wird nur der Parameter <f> angegeben.
In diesen 3 Fllen erkennt RK selbststndig das Format und stellt die verbleibenden
Parameter automatisch ein.
Allerdings werden Parameter-Setzungen mit Prioritt behandelt. D.h. sofern sie angegeben werden,
wird die automatische Einstellung von RK auer Kraft gesetzt.
In anderen (ungetesteten) Fllen mssen zustzliche Angaben gemacht werden, wenigstens den p3-
Parameter betreffend.

Die Parameter im Einzelnen:

f : File:    Dateiname = Pfad zur Datei

t : Table:   Die Excel-Mappe besteht bekanntlich aus einzelnen Tabellen.
             Es kann nur auf eine zur Zeit zugegriffen werden, die hier anzugeben ist.
             Bei Access handelt es sich um die Einzel-Datei der Datenbank.
             Texte sind sozusagen ein-dimensional, so da der Parameter hier entfllt.

             Dem Tabellen-Name in Excel mu ein $ hinzugefgt werden (warum auch immer).
             Bei Text wird automatisch ein #txt generiert.
             Bei Access ist der Tabellen-Name unverndert anzugeben.
             Andere Formate wurden nicht geprft.

             Im Zweifelsfalle den Parameter erstmal weglassen und die Tabelle aus der stattdessen
             erscheinenden Auswahlbox auswhlen. In dieser kann man die genauen Tabellen-Bezeich-
             nungen erkennen, um die gewnschte spter in den t-Parameter zu bertragen.

p3: Connect: Angabe des Datenbank-Typs. Die genauen Beschreibungen lauten (Access ohne Semikolon): 

             Access
             dBASE III;
             dBASE IV;
             dBASE 5.0;
             Excel 3.0;
             Excel 4.0;
             Excel 5.0;
             Excel 8.0;
             FoxPro 2.0;
             FoxPro 2.5;
             FoxPro 2.6;
             FoxPro 3.0;
             Lotus WK1;
             Lotus WK3;
             Lotus WK4;
             Paradox 3.x;
             Paradox 4.x;
             Paradox 5.x;
             Text;

             RK benutzt standardmig Excel 3.0. Damit kann problemlos auch auf 8.0-Dateien
             zugegriffen werden, ist aber eben auch fr ltere Versionen geeignet.

p4: Rec-Set-Type: p4 = 0 - 2. Es knnen folgende Typen eingestellt werden:

             0 : Table
             1 : Dynaset  (Standard-Einstellung)
             2 : Snapshot

             Im Test (mdb/xls/txt) lief alles unter Dynaset, Table funktionierte auch.
 
p5: Engine: p5 = 0 - 1. Hier kann zwischen folgenden "Treiber-Maschinen" gewhlt werden:

             0 : Jet  (MS, Standard-Einstellung)
             1 : ODBC

Example: {/DB.OPEN c:\data\db.xls}
Example: {/DB.OPEN c:\data\db.mdb,sheet1}
Example: {/DB.OPEN c:\data\db.xls,sheet1$}
Example: {/DB.OPEN c:\data\db.txt}
Example: {/DB.OPEN c:\data\db.xyz,sheet1,dBASE III;}     (Parameter fr dbase unbekannt!)
Example: {/DB.OPEN c:\data\db.xyz,sheet1,dBASE III;,0}
Example: {/DB.OPEN c:\data\db.xyz,sheet1,dBASE III;,2,1}


/DB.CLOSE .............: To close current database
------------------------
Das Schlieen einer Datenbank ermglicht es, wieder von anderen Anwendungen auf
die Bank zuzugreifen und gibt darber hinaus reservierten Speicher wieder frei.

Example: {/DB.CLOSE}


/DB.FIELD.ASK .........: To set field number, defined from user while script is in process
------------------------

Example: {/DB.FIELD.ASK}


/DB.FIELD.CLIP [len] ..: To copy current field content to clip, optional maximal length [len]
------------------------

Example: {/DB.FIELD.CLIP}
Example: {/DB.FIELD.CLIP 25}

Im letzten Beispiel werden die ersten 25 Zeichen des aktuellen Datenfeldes in die
Zwablage kopiert.


/DB.FIELD.INC .........: To increment field number
/DB.FIELD.DEC .........: To decrement field number
------------------------

Example: {/DB.FIELD.INC}


/DB.FIELD.NMB>VAR .....: To copy field number into current VAR
/DB.FIELD.NMB<VAR .....: To set field number to current VAR
------------------------
Ermglicht den Austausch der Feld-Nummer mit der Variablen VAR, soda Berechnungen
mglich sind.
(siehe Command-Gruppe VAR-Commands, Rechnen)

Example: 

{/BTCH.EXPLICIT}
{/DB.FIELD.NMB>VAR}
{/VAR.ADD 3}
{/DB.FIELD.NMB<VAR}


/DB.FIELD.SEND [len] ..: To send current field content, optional maximal length [len]
------------------------
Das Datenfeld ist das kleinste Element der Datenbank:
Datenbank -> Tabelle -> Datensatz -> Datenfeld
Nur dieses kann durch RK gesendet werden.
Ganze Datenstze sendet man daher durch eine Verkettung von DB.FIELD.SEND-Commands
im Skript. Vor dem Senden mu der Datensatz-Zeiger entsprechend positioniert werden.

Example:

{/BTCH.EXPLICIT}
{/DB.REC.SELECT}
{/BTCH.EXITIF.CANCEL}
{/DB.FIELD.SET 4}
{/DB.FIELD.SEND}{KEY.TAB}
{/DB.FIELD.SET 5}
{/DB.FIELD.SEND}{KEY.TAB}
{/DB.FIELD.SET 6}
{/DB.FIELD.SEND}{KEY.TAB}

Example: {/DB.FIELD.SEND 15}

In diesem Beispiel wird die Ausgabe auf 15 Zeichen begrenzt.


/DB.FIELD.SEND.FRMT str: To send current field content in formatted output (str=###0.00 to get 1,30)
------------------------
Gestattet die formatierte Ausgabe fr Zahlen- und Datums-Feldern.

Example: {/DB.FIELD.SEND.FRMT ##0.00}
Example: {/DB.FIELD.SEND.FRMT long date}

-> Beachte!
Fr Datums-Felder trifft die Beschreibung in den DAT-Commands zu (DAT.FORMAT str),
mit Ausnahme der "Alleinstehenden Parametern" (Stand Alone).


/DB.Field.SET nmb .....: To set field number to <nmb>
------------------------

Example: {/DB.Field.SET 5}


/DB.Field.VIEW ........: To show current field content in the internal text viewer
------------------------

Example: {/DB.Field.VIEW}


/DB.PROP.VIEW .........: To show current database properties in the internal text viewer
------------------------

Example: {/DB.PROP.VIEW}


/DB.REC.ASK ...........: To set record number, defined from user while script is in process
------------------------

Example: {/DB.REC.ASK}


/DB.REC.INC ...........: To increment record number
/DB.REC.DEC ...........: To decrement record number
------------------------

Example: {/DB.REC.INC}


/DB.REC.NMB>VAR .......: To copy record number into current VAR
/DB.REC.NMB<VAR .......: To set record number to current VAR
------------------------
Ermglicht den Austausch der Datensatz-Nummer mit der Variablen VAR, soda Berechnungen
mglich sind.
(siehe Command-Gruppe VAR-Commands, Rechnen)

Example: 

{/BTCH.EXPLICIT}
{/DB.REC.NMB>VAR}
{/VAR.ADD 3}
{/DB.REC.NMB<VAR}


/DB.REC.SELECT ........: To set record && field number by selecting from 2 lists
------------------------
Dieses Fenster gestattet es, ein beliebiges Datenfeld eines beliebigen Datensatzes
auszuwhlen. Den Datensatz selektiert man in der linken, das Datenfeld in der rechten
Liste. Die Bestimmung von Datensatz- und Datenfeld-Nummer bleibt nach dem Schlieen des
Fensters erhalten, um mit ihnen ggf. weiterzuarbeiten, indem man z.B. das selektierte
Datenfeld mittels {/DB.FIELD.SEND} an eine Anwendung sendet.

Die mglichen Fenster-Einstellungen findet der Anwender durch Probieren sicher
schnell heraus.
Ein Wort zu "Auto": Diese Einstellung ermittelt, hnlich wie in Excel, durch Prfen
smtlicher Datenfelder die maximal erforderliche Spaltenbreite.
Einstellungsnderungen werden - auch beim Klick auf Cancel - im Verlauf der Session
weiter benutzt. Gespeichert hingegen werden sie nur durch Klick auf OK und stehen
sodann automatisch in der kommenden Session zur Verfgung.
Text-Files besitzen nur ein Datenfeld (0), weswegen die meisten Funktionen hier deaktiviert
sind.

Example: {/DB.REC.SELECT}

--> Tip
Wird der Dialog durch "Abbrechen" geschlossen, so kann die Skript-Abarbeitung
an dieser Stelle durch den Command "BTCH.EXIT-ON-CANCEL" (siehe dort) beendet
werden.

--> Tip
Die Listenbreiten lassen sich durch drag & drop verndern, indem man den Balken zwischen
den Listen greift und verschiebt.

--> Tip
Neben den windows-seitigen Steuerungsmglichkeiten in den Listen (CRSR-DOWN/UP) sind
zustzlich verfgbar:

[CRSR-RIGHT] : aktiviert die rechte Liste (zwecks CRSR-DOWN/UP)
[CRSR-LEFT]  : aktiviert die linke  Liste
[Enter] .....: entspricht Klick auf OK-Knopf
[Space] .....: entspricht Klick auf OK-Knopf


/DB.REC.SET nmb .......: To set record number to <nmb>
------------------------
Der Datensatz besteht aus einer Gruppe zusammengehrender Datenfelder, z.B.
Anrede, Nachname, Vorname, Ort etc. Im Falle von Excel ist der Datensatz eine
Zellen-Zeile und das Datenfeld die einzelne Zelle.

Example: {/DB.REC.SET 155}


/DB.REC.VIEW [len] ....: To show all fields in the int. text viewer, optional max. length [len]
------------------------

Example: {/DB.REC.VIEW}
Example: {/DB.REC.VIEW 75}

Im letzten Beispiel werden 75 Zeichen (von links) smtlicher Datenfelder (Kette) des aktuellen
Datensatzes angezeigt.

-> Beachte!
Funktionsnderung des Parameters zu RK v7.0. Ggf. Parameter anpassen.


/DB.TABLE.ASK-N .......: To set table number, defined from user while script is in process
/DB.TABLE.ASK-S .......: To set table name, defined from user while script is in process
------------------------

Example: {/DB.TABLE.ASK-N}
Example: {/DB.TABLE.ASK-S}


/DB.TABLE.SELECT ......: To select table from list
------------------------
Bei geffneter Datenbank kann so zwischen verschiedenen Tabellen hin- und hergeschaltet werden.

Example: {/DB.TABLE.SELECT}


/DB.TABLE.SET-N nmb ...: To set table number <nmb>
/DB.TABLE.SET-S str ...: To set table name <str>
------------------------

Example: {/DB.TABLE.SET-N 4}
Example: {/DB.TABLE.SET-S profit$}